#!/usr/bin/env python
"""
##############################################################################
用法：./find.py 'pattern' dirpath

返回某个根目录及其子目录下所有匹配某个文件名模式的文件；

find()是一个生成器，利用os.walk()生成器产生匹配的文件名，可使用findlist强制生成结果列表。
##############################################################################
"""

import os
import sys
import fnmatch

DOSORT = False
STARTDIR = os.curdir


def find(pattern, startdir=STARTDIR):
    for thisdir, subdirs, files in os.walk(startdir):
        for name in (subdirs + files):
            if fnmatch.fnmatch(name, pattern):
                fp = os.path.join(thisdir, name)
                yield fp


def findlist(pattern, startdir=STARTDIR, dosort=DOSORT):
    matches = find(pattern, startdir)
    if dosort:
        matches.sort()
    return matches


def command():
    pattern, startdir = sys.argv[1:3]
    print('pattern ->', pattern, 'startdir ->', startdir)
    for match in find(pattern, startdir):
        print(match)


if __name__ == '__main__':
    command()
